本篇文章同步發表在 HKT 線上教室 部落格,線上影音教學課程已上架至 Udemy 和 Youtube 頻道。另外,想追蹤更多相關技術資訊,歡迎到 臉書粉絲專頁 按讚追蹤喔~
今天要跟大家介紹 Kotlin 語法的內容大綱:
我們會將相關功能放在一個類別當中,就像生活中用的計算機一樣。以這次為例,我們將加、減、乘、除四個數學計算的功能,放在一個計算機類別當中,當別人或是自己下次要使用,不用再重覆造輪子,只要呼叫這個類別,使用裡面的方法即可。
類別裡,加入四個方法,分別是加、減、乘、除。
class Calc {
fun sum(x: Int, y: Int) {
println(x + y)//加法運算
}
fun substract(x: Int, y: Int) {
println(x - y)//減法運算
}
fun multiply(x: Int, y: Int) {
println(x * y) //乘法運算
}
fun divide(x: Int, y: Int) {
println(x / y)//除法運算
}
}
我們會將類別實體化出來成為一個物件,透過這個物件來訪問類別裡面定義的屬性與方法。
fun main() {
//實體化
val calc = Calc()
calc.sum(1, 1) //2
calc.substract(1, 1)//0
calc.multiply(1, 1)//1
calc.divide(1, 1)//1
}
2
0
1
1
在 Account 類別中分別加入帳號、戶名和餘額三個類別屬性
class Account {
//帳號
var id: String = ""
//戶名
var name: String = ""
//餘額
var balance: String = ""
}
fun main() {
//實體化
val account = Account()
//設定類別屬性值
account.id = "123456789"
account.name = "HKT"
account.balance = "100"
//獲取類別屬性值
println(account.id)
println(account.name)
println(account.balance)
}
123456789
HKT
100
若不想讓使用類別者直接訪問屬性值或是在獲取與設定屬性值過程中想要加工資料,則可以透過 getter 與 setter 方法。
class Account {
//戶名
var name: String = ""
get() = field.toUpperCase()
set(value) {
if (value == "") {
field = "戶名不能為空"
} else {
field = value
}
}
}
fun main() {
//實體化
val account = Account()
account.name = "HKT"
println(account.name)
account.name = ""
println(account.name)
}
HKT
戶名不能為空
類別被實體化出來時,中間過程會先經過 init 然後 constructor ,可以將想要初始化的邏輯程式放在這裡面。
class Account {
//戶名
var name: String = ""
init {
println("初始化,第一層")
}
constructor() {
println("初始化,第二層")
}
}
fun main() {
//實體化
val account = Account()
account.name = "HKT"
println(account.name)}
}
初始化,第一層
初始化,第二層
HKT
父類別需加入 open 關鍵修飾詞,才能讓其他子類別繼承,否成編譯會報錯誤。
open class Person {
//戶名
var name: String = ""
//地址
var address: String = ""
}
class Account : Person() {
//帳號
var id: String = ""
}
fun main() {
//實體化
val account = Account()
account.id = "123456789"
account.name = “HKT"
account.address = "台北市信義區信義路五段7號"
println(account.id)
println(account.name)
println(account.address)
}
123456789
HKT
台北市信義區信義路五段7號
父類別中的屬性,若允許子類別繼承後可以覆寫屬性,須在前方加入 open 關鍵修飾詞,否則編譯時會報錯誤。反過來,若不提供子類別覆寫,則不需要加入open 修飾詞。
open class Person {
//戶名
open var name: String = ""
}
在子類別中加入 override 關鍵修飾詞,即可以修飾父類別中的屬性
class Account : Person() {
//覆寫戶名
override var name: String = ""
}
fun main() {
//實體化
val account = Account()
account.name = "HKT"
println(account.name)
}
HKT
父類別中的方法,若允許子類別繼承後可以覆寫方法,須在前方加入 open 關鍵修飾詞,否則編譯時會報錯誤。反過來,若不提供子類別覆寫,則不需要加入open 修飾詞。
open class Person {
open fun showName() {
println("HKT")
}
}
在子類別中加入 override 關鍵修飾詞,即可以修飾父類別中的方法
class Account : Person() {
override fun showName() {
println("Kitty")
}
}
fun main() {
//實體化
val account = Account()
account.showName()
}
Kitty
可以透過介面的方式,來約定若要實作這個介面,需履約實作哪些方法。
interface PersonInterface {
fun showName()
}
若我們使用 PersonInterface 介面,但沒履約實作裡面的方法,編譯會噴錯誤。
class Account : PersonInterface {
override fun showName() {
println("name: HKT")
}
}
fun main() {
//實體化
val account = Account()
account.showName()
}
name: HKT
class Account {
var id: String = ""
}
fun Account.Print() {
println("帳號: " + id)
}
fun main() {
//實體化
val account = Account()
account.id = "123456789"
account.Print()
}
帳號: 123456789
可以把「泛型」想像成是神奇寶貝當中的百變怪。當我們想要處理不論是類別或是方法的參數,想要處理各種傳進來的資料類型,我們就可以使用泛型。
class Box<T>(t: T) {
var value = t
}
fun main() {
val box_int = Box(1)
println(box_int.value)
val box_string = Box("我是字串")
println(box_string.value)
}
1
我是字串
HKT 線上教室
https://tw-hkt.blogspot.com/
Freepik
https://www.freepik.com/
Kotlin docs
https://kotlinlang.org/docs/home.html
那今天【iThome 鐵人賽】就介紹到這邊囉~
順帶一提,KT 線上教室,臉書粉絲團,會不定期發佈相關資訊,不想錯過最新資訊,不要忘記來按讚,追蹤喔!也歡迎大家將這篇文章分享給更多人喔。
我們明天再見囉!!!掰掰~